{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from model import Dit, DitModelArgs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "load model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "model parameter: 30708480\n",
      "Model size: 117.14 MB\n"
     ]
    }
   ],
   "source": [
    "config = DitModelArgs(n_labels=10, in_channels=1)\n",
    "model = Dit(config=config)\n",
    "model_params = sum(p.numel() for p in model.parameters())\n",
    "model_params_size = model_params * 4 / (1024 ** 2)\n",
    "print(\"model parameter:\", model_params)\n",
    "print(f'Model size: {model_params_size:.2f} MB')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "dataloader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataset size: 60000\n",
      "dataloader size: 200\n"
     ]
    }
   ],
   "source": [
    "from torch.utils.data import DataLoader\n",
    "from utils.dataset import FigureDataSet\n",
    "from torchvision import transforms\n",
    "from torchvision.transforms import Compose\n",
    "\n",
    "#\n",
    "#---Here Set Your Image Data Path---\n",
    "#\n",
    "root_dir = 'your_train_data'\n",
    "\"\"\"Stucture be like:\n",
    "        /your_train_data\n",
    "            /0\n",
    "                image1.jpg\n",
    "                image2.jpg\n",
    "            /1\n",
    "                image1.jpg\n",
    "                image2.jpg\n",
    "            /2\n",
    "                image1.jpg\n",
    "                image2.jpg\n",
    "            /...\n",
    "\"\"\"\n",
    "transform = Compose([transforms.Grayscale(num_output_channels=1),transforms.ToTensor(), transforms.Resize((16, 16))])\n",
    "dataset = FigureDataSet(root_dir=root_dir, transform=transform)\n",
    "dataloader = DataLoader(dataset, batch_size=300, shuffle=True)\n",
    "print(\"dataset size:\", len(dataset))\n",
    "print(\"dataloader size:\", len(dataloader))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "test_utils"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "show origin image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 16, 16])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x200db5667d0>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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bgAAKcpZAZWVlWnatGkqLi52tQsAQApzci24F154QfX19dq1a1eP27a1tamtrS1xOxqNuogEAEgyvh8BNTY2at68eXruueeUmZnZ4/ZVVVUKh8OJpaCgwO9IAIAk5HsB1dXVqbm5WVdeeaWCwaCCwaA2b96s5cuXKxgMKhbrfKXeiooKtbS0JJbGxka/IwEAkpDvb8Fdd911eu+99zqtmz17tkaMGKGFCxcq/XOXoQ+FQgo5/KoBAEBy8r2AsrOzNWrUqE7rBg4cqNzc3NPWAwC+vLgSAgDARJ98I+pbb73VF7sBAKQQjoAAACYoIACACQoIAGCCAgIAmKCAAAAm+uQsuGQS+Nwfwvo73F2fx8Ze4mz2/1q43dlsSbpz8DZns6dvLnM2O7yj50tJnavoP8edzd70rZ85m73ogp6v73iu1k661tnswa+5+7eUpFh7h7vhXqznbVIUR0AAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMBE0DpAt7y4pLiDwekOZv5VWlams9n7Zmc4m/10zlZnsyXp+v83x9nsS+YccDY73nrC2ezz/3Wss9m/vyHX2eyvph9zN3u7u9+H462fOpuNc8cREADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAEw4KaDDhw/rjjvuUG5urrKysjR69Gjt3r3bxa4AACnK9z9E/fjjjzVx4kRNmTJFr732mr761a/qwIEDGjx4sN+7AgCkMN8LaNmyZSooKNCzzz6bWFdUVOT3bgAAKc73t+BeffVVjRs3TrfccouGDBmisWPH6plnnul2+7a2NkWj0U4LAKD/872APvjgA9XU1Gj48OF644039N3vfldz587VmjVruty+qqpK4XA4sRQUFPgdCQCQhHwvoHg8riuvvFJLly7V2LFjdc899+juu+/WypUru9y+oqJCLS0tiaWxsdHvSACAJOR7AQ0dOlSXXXZZp3WXXnqpPvzwwy63D4VCGjRoUKcFAND/+V5AEydO1L59+zqt279/vy666CK/dwUASGG+F9D999+v7du3a+nSpTp48KDWrl2rVatWqayszO9dAQBSmO8FdPXVV2vdunV6/vnnNWrUKD388MOqrq7WzJkz/d4VACCFOflG1BtuuEE33HCDi9EAgH6Ca8EBAExQQAAAExQQAMAEBQQAMOHkJARfBNL+uvgtPd3/mX9zYtIlzmY//S+rnc1+o9VdbkkaVhNwNtv79FNnswNp7nJ3nOfueZid5u4xOdxxvrPZA4+2O5stL+5uttw+VxxHN8UREADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMBG0DtDXvPYOZ7NPDHH3cI7I+NjZ7PUfX+VstiQFYnFns9PCg5zNVu5gZ6MP/4uz0bpkwKfOZv/7p193Njvz0CfOZsfinrPZkiTP3XO8P+MICABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACZ8L6BYLKbKykoVFRUpKytLF198sR5++GF5nuPz8AEAKcX3v5xctmyZampqtGbNGo0cOVK7d+/W7NmzFQ6HNXfuXL93BwBIUb4X0G9/+1vddNNNmjZtmiRp2LBhev7557Vz506/dwUASGG+vwV37bXXqra2Vvv375ckvfvuu9q6datKSkq63L6trU3RaLTTAgDo/3w/Alq0aJGi0ahGjBih9PR0xWIxLVmyRDNnzuxy+6qqKv3kJz/xOwYAIMn5fgT00ksv6bnnntPatWtVX1+vNWvW6Gc/+5nWrFnT5fYVFRVqaWlJLI2NjX5HAgAkId+PgBYsWKBFixbptttukySNHj1ahw4dUlVVlUpLS0/bPhQKKRQK+R0DAJDkfD8COnHihNLSOo9NT09XPM7lygEAf+f7EdD06dO1ZMkSFRYWauTIkXrnnXf0+OOP66677vJ7VwCAFOZ7AT355JOqrKzU9773PTU3NysSieg73/mOFi9e7PeuAAApzPcCys7OVnV1taqrq/0eDQDoR7gWHADABAUEADBBAQEATFBAAAATvp+EkOwCaQFnsy/Y9Rdns39y5N+czf7Z1/7T2WxJ+r+r/uxs9uaP/tnZ7KsGv+9s9pPn73A2+4L0rzibHffc/c4aaPvM2WwkJ46AAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACAiaB1gG55cUlxB4PTHcz8q/jBPzqb3fCjUc5mX/ntS53NlqTbx+1wNvvm/Dpns//rxNeczS75bZmz2TXj/93Z7PPS2pzNjn/lPGezkZw4AgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAICJXhfQli1bNH36dEUiEQUCAa1fv77T/Z7nafHixRo6dKiysrJUXFysAwcO+JUXANBP9LqAWltbNWbMGK1YsaLL+x977DEtX75cK1eu1I4dOzRw4EBNnTpVJ0+e/MJhAQD9R6+vhFBSUqKSkpIu7/M8T9XV1frRj36km266SZL0q1/9Snl5eVq/fr1uu+22L5YWANBv+PoZUENDg5qamlRcXJxYFw6HNWHCBG3btq3Ln2lra1M0Gu20AAD6P18LqKmpSZKUl5fXaX1eXl7ivs+rqqpSOBxOLAUFBX5GAgAkKfOz4CoqKtTS0pJYGhsbrSMBAPqArwWUn58vSTp69Gin9UePHk3c93mhUEiDBg3qtAAA+j9fC6ioqEj5+fmqra1NrItGo9qxY4euueYaP3cFAEhxvT4L7vjx4zp48GDidkNDg/bs2aOcnBwVFhZq/vz5euSRRzR8+HAVFRWpsrJSkUhEM2bM8DM3ACDF9bqAdu/erSlTpiRul5eXS5JKS0u1evVqff/731dra6vuueceffLJJ5o0aZJef/11ZWZm+pcaAJDyel1AkydPlud53d4fCAT00EMP6aGHHvpCwQAA/Zv5WXAAgC8nCggAYIICAgCYoIAAACZ6fRJCqvM6OtwNj3d/csYXlfH2XmezL93t9gzFPV/9J2ez63KvcDY7PeruCu7DW//ibPaWV0c4m/2Nr7zvbPaJInd/hJ71fsDZbEnyOty99vszjoAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAICJoHWA7gSCAxQIDPB9rtfR7vvMvw+Puxvd3uFsdjzW6my2JKn1U3ezD7r794x5nrPZ6bk5zmanyV3uMRlRZ7Mbrw84mz1iW9jZbEmK/c9f3A13+Dy0xhEQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATPS6gLZs2aLp06crEokoEAho/fr1ifva29u1cOFCjR49WgMHDlQkEtGdd96pI0eO+JkZANAP9LqAWltbNWbMGK1YseK0+06cOKH6+npVVlaqvr5eL7/8svbt26cbb7zRl7AAgP6j11dCKCkpUUlJSZf3hcNhbdy4sdO6p556SuPHj9eHH36owsLCc0sJAOh3nF+Kp6WlRYFAQOeff36X97e1tamtrS1xOxp1d6kPAEDycHoSwsmTJ7Vw4ULdfvvtGjRoUJfbVFVVKRwOJ5aCggKXkQAAScJZAbW3t+vWW2+V53mqqanpdruKigq1tLQklsbGRleRAABJxMlbcKfK59ChQ3rzzTe7PfqRpFAopFAo5CIGACCJ+V5Ap8rnwIED2rRpk3Jzc/3eBQCgH+h1AR0/flwHDx5M3G5oaNCePXuUk5OjoUOH6uabb1Z9fb02bNigWCympqYmSVJOTo4yMjL8Sw4ASGm9LqDdu3drypQpidvl5eWSpNLSUv34xz/Wq6++Kkm64oorOv3cpk2bNHny5HNPCgDoV3pdQJMnT5Z3hm/oO9N9AACcwrXgAAAmKCAAgAkKCABgggICAJiggAAAJpxfjPSceXFJcd/HBtLTfZ95itfR4Wy2i8fiFC/mbPTfONyBy7Mu09w9V1xq99zlDqdlOps9adwfnM3+6HzHfxD/P39xO7+f4ggIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYCFoH6I7X0SEvELCOkTw8zzrBl0885m708VZns1/8z0nOZv/3N8LOZu/91Uhns/Ob/8vZbJw7joAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgIleF9CWLVs0ffp0RSIRBQIBrV+/vttt7733XgUCAVVXV3+BiACA/qjXBdTa2qoxY8ZoxYoVZ9xu3bp12r59uyKRyDmHAwD0X73+Q9SSkhKVlJSccZvDhw/rvvvu0xtvvKFp06adczgAQP/l+2dA8Xhcs2bN0oIFCzRypLu/bAYApDbfL8WzbNkyBYNBzZ0796y2b2trU1tbW+J2NBr1OxIAIAn5egRUV1enJ554QqtXr1bgLK/jVlVVpXA4nFgKCgr8jAQASFK+FtDbb7+t5uZmFRYWKhgMKhgM6tChQ3rggQc0bNiwLn+moqJCLS0tiaWxsdHPSACAJOXrW3CzZs1ScXFxp3VTp07VrFmzNHv27C5/JhQKKRQK+RkDAJACel1Ax48f18GDBxO3GxoatGfPHuXk5KiwsFC5ubmdth8wYIDy8/N1ySWXfPG0AIB+o9cFtHv3bk2ZMiVxu7y8XJJUWlqq1atX+xYMANC/9bqAJk+eLK8XX472xz/+sbe7AAB8CXAtOACACQoIAGCCAgIAmKCAAAAmKCAAgAnfrwUHoGfeP1z/0G//9ON3nc3+76xMZ7PzWt9xNjve0eFsNs4dR0AAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAE0HrAJ/neZ4kqUPtkmccBkhBad5nzmYH4u5+Z/Uc5va8mLPZzud7qfcfYYfaJf39//PuJF0BHTt2TJK0Vf9hnARIUSdSdDb6nWPHjikcDnd7f8DrqaL6WDwe15EjR5Sdna1AINDj9tFoVAUFBWpsbNSgQYP6IKE/yN23UjW3lLrZyd23kim353k6duyYIpGI0tK6P2pOuiOgtLQ0XXjhhb3+uUGDBpk/6OeC3H0rVXNLqZud3H0rWXKf6cjnFE5CAACYoIAAACZSvoBCoZAefPBBhUIh6yi9Qu6+laq5pdTNTu6+lYq5k+4kBADAl0PKHwEBAFITBQQAMEEBAQBMUEAAABMpXUArVqzQsGHDlJmZqQkTJmjnzp3WkXpUVVWlq6++WtnZ2RoyZIhmzJihffv2WcfqtUcffVSBQEDz58+3jtKjw4cP64477lBubq6ysrI0evRo7d692zrWGcViMVVWVqqoqEhZWVm6+OKL9fDDD/d4bS0LW7Zs0fTp0xWJRBQIBLR+/fpO93uep8WLF2vo0KHKyspScXGxDhw4YBP2H5wpd3t7uxYuXKjRo0dr4MCBikQiuvPOO3XkyBG7wH/T0+P9j+69914FAgFVV1f3Wb7eSNkCevHFF1VeXq4HH3xQ9fX1GjNmjKZOnarm5mbraGe0efNmlZWVafv27dq4caPa29t1/fXXq7W11TraWdu1a5eefvppXX755dZRevTxxx9r4sSJGjBggF577TX9/ve/189//nMNHjzYOtoZLVu2TDU1NXrqqaf0hz/8QcuWLdNjjz2mJ5980jraaVpbWzVmzBitWLGiy/sfe+wxLV++XCtXrtSOHTs0cOBATZ06VSdPnuzjpJ2dKfeJEydUX1+vyspK1dfX6+WXX9a+fft04403GiTtrKfH+5R169Zp+/btikQifZTsHHgpavz48V5ZWVnidiwW8yKRiFdVVWWYqveam5s9Sd7mzZuto5yVY8eOecOHD/c2btzoffOb3/TmzZtnHemMFi5c6E2aNMk6Rq9NmzbNu+uuuzqt+9a3vuXNnDnTKNHZkeStW7cucTsej3v5+fneT3/608S6Tz75xAuFQt7zzz9vkLBrn8/dlZ07d3qSvEOHDvVNqLPQXe4//elP3te+9jVv79693kUXXeT94he/6PNsZyMlj4A+++wz1dXVqbi4OLEuLS1NxcXF2rZtm2Gy3mtpaZEk5eTkGCc5O2VlZZo2bVqnxz6Zvfrqqxo3bpxuueUWDRkyRGPHjtUzzzxjHatH1157rWpra7V//35J0rvvvqutW7eqpKTEOFnvNDQ0qKmpqdPzJRwOa8KECSn5Wg0EAjr//POto5xRPB7XrFmztGDBAo0cOdI6zhkl3cVIz8ZHH32kWCymvLy8Tuvz8vL0/vvvG6XqvXg8rvnz52vixIkaNWqUdZwevfDCC6qvr9euXbuso5y1Dz74QDU1NSovL9cPfvAD7dq1S3PnzlVGRoZKS0ut43Vr0aJFikajGjFihNLT0xWLxbRkyRLNnDnTOlqvNDU1SVKXr9VT96WCkydPauHChbr99tuT4kKfZ7Js2TIFg0HNnTvXOkqPUrKA+ouysjLt3btXW7dutY7So8bGRs2bN08bN25UZmamdZyzFo/HNW7cOC1dulSSNHbsWO3du1crV65M6gJ66aWX9Nxzz2nt2rUaOXKk9uzZo/nz5ysSiSR17v6ovb1dt956qzzPU01NjXWcM6qrq9MTTzyh+vr6s/o6G2sp+RbcBRdcoPT0dB09erTT+qNHjyo/P98oVe/MmTNHGzZs0KZNm87p6yf6Wl1dnZqbm3XllVcqGAwqGAxq8+bNWr58uYLBoGIxt984ea6GDh2qyy67rNO6Sy+9VB9++KFRorOzYMECLVq0SLfddptGjx6tWbNm6f7771dVVZV1tF459XpM1dfqqfI5dOiQNm7cmPRHP2+//baam5tVWFiYeJ0eOnRIDzzwgIYNG2Yd7zQpWUAZGRm66qqrVFtbm1gXj8dVW1ura665xjBZzzzP05w5c7Ru3Tq9+eabKioqso50Vq677jq999572rNnT2IZN26cZs6cqT179ig9Pd06YpcmTpx42mnu+/fv10UXXWSU6OycOHHitC/ySk9PVzweN0p0boqKipSfn9/ptRqNRrVjx46kf62eKp8DBw7oN7/5jXJzc60j9WjWrFn63e9+1+l1GolEtGDBAr3xxhvW8U6Tsm/BlZeXq7S0VOPGjdP48eNVXV2t1tZWzZ492zraGZWVlWnt2rV65ZVXlJ2dnXgfPBwOKysryzhd97Kzs0/7nGrgwIHKzc1N6s+v7r//fl177bVaunSpbr31Vu3cuVOrVq3SqlWrrKOd0fTp07VkyRIVFhZq5MiReuedd/T444/rrrvuso52muPHj+vgwYOJ2w0NDdqzZ49ycnJUWFio+fPn65FHHtHw4cNVVFSkyspKRSIRzZgxwy60zpx76NChuvnmm1VfX68NGzYoFoslXqs5OTnKyMiwit3j4/35ohwwYIDy8/N1ySWX9HXUnlmfhvdFPPnkk15hYaGXkZHhjR8/3tu+fbt1pB5J6nJ59tlnraP1Wiqchu15nvfrX//aGzVqlBcKhbwRI0Z4q1atso7Uo2g06s2bN88rLCz0MjMzva9//eveD3/4Q6+trc062mk2bdrU5XO6tLTU87y/nopdWVnp5eXleaFQyLvuuuu8ffv22Yb2zpy7oaGh29fqpk2bkjZ3V5L5NGy+jgEAYCIlPwMCAKQ+CggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJv4/NlevFnlTTUsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "img = dataset[59000][0]\n",
    "print(img.shape)\n",
    "img_show = img.permute(1,2,0)\n",
    "plt.imshow(img_show) # show the origin image"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "show forward_add_noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1500x1500 with 30 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "t = torch.tensor([299])\n",
    "x = img.unsqueeze(0)\n",
    "x = x * 2 - 1 # convert [0, 1] to [-1, 1]\n",
    "\n",
    "rows = 5\n",
    "cols = 6\n",
    "num_images_to_display = rows * cols  # 30 images\n",
    "total_timesteps = 1000\n",
    "step = total_timesteps // num_images_to_display # 10\n",
    "\n",
    "fig, axes = plt.subplots(rows, cols, figsize=(15, 15))\n",
    "axes = axes.flatten()\n",
    "\n",
    "for i in range(num_images_to_display):\n",
    "    timestep = total_timesteps - 1 - (i * step)  # Calculate the timestep\n",
    "    t = torch.tensor([timestep], dtype=torch.long)\n",
    "    add_noise_img, noise = model.get_noise(x, t)\n",
    "\n",
    "    final_img = (add_noise_img + 1) / 2  # Convert [-1, 1] to [0, 1]\n",
    "\n",
    "    if final_img.ndim == 4:\n",
    "        final_img = final_img.squeeze(0)\n",
    "\n",
    "    final_img = final_img.permute(1, 2, 0).cpu().numpy()\n",
    "\n",
    "    axes[i].imshow(final_img)\n",
    "    axes[i].axis('off')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 1/500: 100%|██████████| 200/200 [01:38<00:00,  2.02it/s, loss=0.414]\n",
      "Epoch 2/500: 100%|██████████| 200/200 [01:39<00:00,  2.02it/s, loss=0.201]\n",
      "Epoch 3/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.178]\n",
      "Epoch 4/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.126]\n",
      "Epoch 5/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.137]\n",
      "Epoch 6/500: 100%|██████████| 200/200 [01:42<00:00,  1.95it/s, loss=0.127]\n",
      "Epoch 7/500: 100%|██████████| 200/200 [01:47<00:00,  1.85it/s, loss=0.14] \n",
      "Epoch 8/500: 100%|██████████| 200/200 [01:44<00:00,  1.91it/s, loss=0.136]\n",
      "Epoch 9/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.134]\n",
      "Epoch 10/500: 100%|██████████| 200/200 [01:42<00:00,  1.95it/s, loss=0.118]\n",
      "Epoch 11/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.119]\n",
      "Epoch 12/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.118]\n",
      "Epoch 13/500:   4%|▍         | 8/200 [00:04<01:53,  1.69it/s, loss=0.11] \n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[6], line 11\u001b[0m\n\u001b[0;32m      8\u001b[0m save_model_dir \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m      9\u001b[0m save_model_epochs \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m---> 11\u001b[0m \u001b[43mtrain_safetensors_save_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43msave_model_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmin_loss\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msave_model_epochs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdataloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moptimizer\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\Desktop\\DL\\Super\\dit\\lm_utils\\src\\train.py:43\u001b[0m, in \u001b[0;36mtrain_safetensors_save_file\u001b[1;34m(save_model_dir, epochs, min_loss, save_model_epochs, model, dataloader, optimizer)\u001b[0m\n\u001b[0;32m     40\u001b[0m _, loss \u001b[38;5;241m=\u001b[39m model(inputs, targets)\n\u001b[0;32m     42\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m loss \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m---> 43\u001b[0m     \u001b[43mloss\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     44\u001b[0m     optimizer\u001b[38;5;241m.\u001b[39mstep()\n\u001b[0;32m     45\u001b[0m     pbar\u001b[38;5;241m.\u001b[39mset_postfix(loss\u001b[38;5;241m=\u001b[39mloss\u001b[38;5;241m.\u001b[39mitem()) \u001b[38;5;66;03m# load the progress bar\u001b[39;00m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\_tensor.py:581\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m    571\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_torch_function_unary(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m    572\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m    573\u001b[0m         Tensor\u001b[38;5;241m.\u001b[39mbackward,\n\u001b[0;32m    574\u001b[0m         (\u001b[38;5;28mself\u001b[39m,),\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    579\u001b[0m         inputs\u001b[38;5;241m=\u001b[39minputs,\n\u001b[0;32m    580\u001b[0m     )\n\u001b[1;32m--> 581\u001b[0m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mautograd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    582\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgradient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\n\u001b[0;32m    583\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\autograd\\__init__.py:347\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m    342\u001b[0m     retain_graph \u001b[38;5;241m=\u001b[39m create_graph\n\u001b[0;32m    344\u001b[0m \u001b[38;5;66;03m# The reason we repeat the same comment below is that\u001b[39;00m\n\u001b[0;32m    345\u001b[0m \u001b[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m    346\u001b[0m \u001b[38;5;66;03m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 347\u001b[0m \u001b[43m_engine_run_backward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    348\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    349\u001b[0m \u001b[43m    \u001b[49m\u001b[43mgrad_tensors_\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    350\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    351\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    352\u001b[0m \u001b[43m    \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    353\u001b[0m \u001b[43m    \u001b[49m\u001b[43mallow_unreachable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m    354\u001b[0m \u001b[43m    \u001b[49m\u001b[43maccumulate_grad\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m    355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\autograd\\graph.py:825\u001b[0m, in \u001b[0;36m_engine_run_backward\u001b[1;34m(t_outputs, *args, **kwargs)\u001b[0m\n\u001b[0;32m    823\u001b[0m     unregister_hooks \u001b[38;5;241m=\u001b[39m _register_logging_hooks_on_whole_graph(t_outputs)\n\u001b[0;32m    824\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 825\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m Variable\u001b[38;5;241m.\u001b[39m_execution_engine\u001b[38;5;241m.\u001b[39mrun_backward(  \u001b[38;5;66;03m# Calls into the C++ engine to run the backward pass\u001b[39;00m\n\u001b[0;32m    826\u001b[0m         t_outputs, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[0;32m    827\u001b[0m     )  \u001b[38;5;66;03m# Calls into the C++ engine to run the backward pass\u001b[39;00m\n\u001b[0;32m    828\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m    829\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m attach_logging_hooks:\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "from utils.train import train_safetensors_save_file\n",
    "import torch\n",
    "\n",
    "optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)\n",
    "epochs = 500\n",
    "min_loss = 0.005\n",
    "model_number = 0\n",
    "save_model_dir = 'model'\n",
    "save_model_epochs = 1\n",
    "\n",
    "train_safetensors_save_file(save_model_dir, epochs, min_loss, save_model_epochs, model, dataloader, optimizer)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "fine-tune"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 1/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.115] \n",
      "Epoch 2/500: 100%|██████████| 200/200 [01:41<00:00,  1.98it/s, loss=0.0982]\n",
      "Epoch 3/500: 100%|██████████| 200/200 [01:41<00:00,  1.98it/s, loss=0.111] \n",
      "Epoch 4/500: 100%|██████████| 200/200 [01:39<00:00,  2.00it/s, loss=0.122] \n",
      "Epoch 5/500: 100%|██████████| 200/200 [01:38<00:00,  2.03it/s, loss=0.0948]\n",
      "Epoch 6/500: 100%|██████████| 200/200 [01:38<00:00,  2.03it/s, loss=0.113] \n",
      "Epoch 7/500: 100%|██████████| 200/200 [01:40<00:00,  1.98it/s, loss=0.101] \n",
      "Epoch 8/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.12]  \n",
      "Epoch 9/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0926]\n",
      "Epoch 10/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0984]\n",
      "Epoch 11/500: 100%|██████████| 200/200 [01:38<00:00,  2.03it/s, loss=0.0939]\n",
      "Epoch 12/500: 100%|██████████| 200/200 [01:37<00:00,  2.04it/s, loss=0.106] \n",
      "Epoch 13/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.102] \n",
      "Epoch 14/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.105] \n",
      "Epoch 15/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0983]\n",
      "Epoch 16/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.104] \n",
      "Epoch 17/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.104] \n",
      "Epoch 18/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.107] \n",
      "Epoch 19/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.106] \n",
      "Epoch 20/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.106] \n",
      "Epoch 21/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0987]\n",
      "Epoch 22/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0994]\n",
      "Epoch 23/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.108] \n",
      "Epoch 24/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.091] \n",
      "Epoch 25/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0979]\n",
      "Epoch 26/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.102] \n",
      "Epoch 27/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.101] \n",
      "Epoch 28/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0872]\n",
      "Epoch 29/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.105] \n",
      "Epoch 30/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.106] \n",
      "Epoch 31/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0969]\n",
      "Epoch 32/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.104] \n",
      "Epoch 33/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.0992]\n",
      "Epoch 34/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0963]\n",
      "Epoch 35/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.0925]\n",
      "Epoch 36/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.103] \n",
      "Epoch 37/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0989]\n",
      "Epoch 38/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0806]\n",
      "Epoch 39/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.103] \n",
      "Epoch 40/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0856]\n",
      "Epoch 41/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0981]\n",
      "Epoch 42/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0931]\n",
      "Epoch 43/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0974]\n",
      "Epoch 44/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0827]\n",
      "Epoch 45/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0946]\n",
      "Epoch 46/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0894]\n",
      "Epoch 47/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0822]\n",
      "Epoch 48/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0912]\n",
      "Epoch 49/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.09]  \n",
      "Epoch 50/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.0858]\n",
      "Epoch 51/500: 100%|██████████| 200/200 [01:37<00:00,  2.04it/s, loss=0.104] \n",
      "Epoch 52/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.0866]\n",
      "Epoch 53/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0986]\n",
      "Epoch 54/500: 100%|██████████| 200/200 [01:34<00:00,  2.11it/s, loss=0.0968]\n",
      "Epoch 55/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0792]\n",
      "Epoch 56/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.1]   \n",
      "Epoch 57/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0926]\n",
      "Epoch 58/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0901]\n",
      "Epoch 59/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0952]\n",
      "Epoch 60/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0878]\n",
      "Epoch 61/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.102] \n",
      "Epoch 62/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.102] \n",
      "Epoch 63/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0975]\n",
      "Epoch 64/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0959]\n",
      "Epoch 65/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0967]\n",
      "Epoch 66/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0937]\n",
      "Epoch 67/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0843]\n",
      "Epoch 68/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0888]\n",
      "Epoch 69/500: 100%|██████████| 200/200 [01:43<00:00,  1.94it/s, loss=0.1]   \n",
      "Epoch 70/500: 100%|██████████| 200/200 [01:39<00:00,  2.00it/s, loss=0.0904]\n",
      "Epoch 71/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0894]\n",
      "Epoch 72/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0937]\n",
      "Epoch 73/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0874]\n",
      "Epoch 74/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.1]   \n",
      "Epoch 75/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0936]\n",
      "Epoch 76/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0989]\n",
      "Epoch 77/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.083] \n",
      "Epoch 78/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0895]\n",
      "Epoch 79/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0945]\n",
      "Epoch 80/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.1]   \n",
      "Epoch 81/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0985]\n",
      "Epoch 82/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.102] \n",
      "Epoch 83/500: 100%|██████████| 200/200 [01:37<00:00,  2.04it/s, loss=0.0985]\n",
      "Epoch 84/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0881]\n",
      "Epoch 85/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0943]\n",
      "Epoch 86/500: 100%|██████████| 200/200 [01:42<00:00,  1.95it/s, loss=0.0929]\n",
      "Epoch 87/500: 100%|██████████| 200/200 [01:41<00:00,  1.96it/s, loss=0.089] \n",
      "Epoch 88/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0948]\n",
      "Epoch 89/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0931]\n",
      "Epoch 90/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0807]\n",
      "Epoch 91/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.102] \n",
      "Epoch 92/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.106] \n",
      "Epoch 93/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.086] \n",
      "Epoch 94/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0974]\n",
      "Epoch 95/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0887]\n",
      "Epoch 96/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0973]\n",
      "Epoch 97/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0972]\n",
      "Epoch 98/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.094] \n",
      "Epoch 99/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0861]\n",
      "Epoch 100/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0938]\n",
      "Epoch 101/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0909]\n",
      "Epoch 102/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0943]\n",
      "Epoch 103/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0917]\n",
      "Epoch 104/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0975]\n",
      "Epoch 105/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0878]\n",
      "Epoch 106/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0889]\n",
      "Epoch 107/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0887]\n",
      "Epoch 108/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0895]\n",
      "Epoch 109/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.11]  \n",
      "Epoch 110/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0956]\n",
      "Epoch 111/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.099] \n",
      "Epoch 112/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0917]\n",
      "Epoch 113/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0912]\n",
      "Epoch 114/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0947]\n",
      "Epoch 115/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0883]\n",
      "Epoch 116/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.099] \n",
      "Epoch 117/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0945]\n",
      "Epoch 118/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0967]\n",
      "Epoch 119/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0901]\n",
      "Epoch 120/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0957]\n",
      "Epoch 121/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0867]\n",
      "Epoch 122/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0883]\n",
      "Epoch 123/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.0919]\n",
      "Epoch 124/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0858]\n",
      "Epoch 125/500: 100%|██████████| 200/200 [01:38<00:00,  2.02it/s, loss=0.09]  \n",
      "Epoch 126/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0923]\n",
      "Epoch 127/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0893]\n",
      "Epoch 128/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.095] \n",
      "Epoch 129/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0871]\n",
      "Epoch 130/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0975]\n",
      "Epoch 131/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0871]\n",
      "Epoch 132/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0893]\n",
      "Epoch 133/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.095] \n",
      "Epoch 134/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0862]\n",
      "Epoch 135/500: 100%|██████████| 200/200 [02:03<00:00,  1.62it/s, loss=0.0983]\n",
      "Epoch 136/500: 100%|██████████| 200/200 [01:56<00:00,  1.72it/s, loss=0.0932]\n",
      "Epoch 137/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0901]\n",
      "Epoch 138/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0877]\n",
      "Epoch 139/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0939]\n",
      "Epoch 140/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0967]\n",
      "Epoch 141/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0874]\n",
      "Epoch 142/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0878]\n",
      "Epoch 143/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0771]\n",
      "Epoch 144/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0993]\n",
      "Epoch 145/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0877]\n",
      "Epoch 146/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.103] \n",
      "Epoch 147/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0871]\n",
      "Epoch 148/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.107] \n",
      "Epoch 149/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0928]\n",
      "Epoch 150/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0904]\n",
      "Epoch 151/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0923]\n",
      "Epoch 152/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0968]\n",
      "Epoch 153/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0863]\n",
      "Epoch 154/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0863]\n",
      "Epoch 155/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0927]\n",
      "Epoch 156/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0889]\n",
      "Epoch 157/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0904]\n",
      "Epoch 158/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0966]\n",
      "Epoch 159/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.102] \n",
      "Epoch 160/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.092] \n",
      "Epoch 161/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0807]\n",
      "Epoch 162/500: 100%|██████████| 200/200 [01:42<00:00,  1.96it/s, loss=0.0885]\n",
      "Epoch 163/500: 100%|██████████| 200/200 [01:41<00:00,  1.98it/s, loss=0.0882]\n",
      "Epoch 164/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0897]\n",
      "Epoch 165/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.084] \n",
      "Epoch 166/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0907]\n",
      "Epoch 167/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0827]\n",
      "Epoch 168/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0826]\n",
      "Epoch 169/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0945]\n",
      "Epoch 170/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0812]\n",
      "Epoch 171/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0897]\n",
      "Epoch 172/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.0868]\n",
      "Epoch 173/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0954]\n",
      "Epoch 174/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.109] \n",
      "Epoch 175/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0836]\n",
      "Epoch 176/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0864]\n",
      "Epoch 177/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0903]\n",
      "Epoch 178/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0769]\n",
      "Epoch 179/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0962]\n",
      "Epoch 180/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0874]\n",
      "Epoch 181/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0963]\n",
      "Epoch 182/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0872]\n",
      "Epoch 183/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0914]\n",
      "Epoch 184/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0913]\n",
      "Epoch 185/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0878]\n",
      "Epoch 186/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0959]\n",
      "Epoch 187/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0821]\n",
      "Epoch 188/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0912]\n",
      "Epoch 189/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0943]\n",
      "Epoch 190/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0872]\n",
      "Epoch 191/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0947]\n",
      "Epoch 192/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0881]\n",
      "Epoch 193/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0861]\n",
      "Epoch 194/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0883]\n",
      "Epoch 195/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0875]\n",
      "Epoch 196/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0962]\n",
      "Epoch 197/500: 100%|██████████| 200/200 [01:39<00:00,  2.00it/s, loss=0.0831]\n",
      "Epoch 198/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0876]\n",
      "Epoch 199/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0896]\n",
      "Epoch 200/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0892]\n",
      "Epoch 201/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0932]\n",
      "Epoch 202/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0831]\n",
      "Epoch 203/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0915]\n",
      "Epoch 204/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0956]\n",
      "Epoch 205/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0803]\n",
      "Epoch 206/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.099] \n",
      "Epoch 207/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0813]\n",
      "Epoch 208/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0954]\n",
      "Epoch 209/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.0993]\n",
      "Epoch 210/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0937]\n",
      "Epoch 211/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0909]\n",
      "Epoch 212/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0886]\n",
      "Epoch 213/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0848]\n",
      "Epoch 214/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0802]\n",
      "Epoch 215/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0754]\n",
      "Epoch 216/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0928]\n",
      "Epoch 217/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.094] \n",
      "Epoch 218/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0868]\n",
      "Epoch 219/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0833]\n",
      "Epoch 220/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0777]\n",
      "Epoch 221/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0737]\n",
      "Epoch 222/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0806]\n",
      "Epoch 223/500: 100%|██████████| 200/200 [01:38<00:00,  2.03it/s, loss=0.0861]\n",
      "Epoch 224/500: 100%|██████████| 200/200 [01:47<00:00,  1.87it/s, loss=0.0853]\n",
      "Epoch 225/500: 100%|██████████| 200/200 [01:38<00:00,  2.03it/s, loss=0.0853]\n",
      "Epoch 226/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0892]\n",
      "Epoch 227/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0941]\n",
      "Epoch 228/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0889]\n",
      "Epoch 229/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0772]\n",
      "Epoch 230/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0839]\n",
      "Epoch 231/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0979]\n",
      "Epoch 232/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0896]\n",
      "Epoch 233/500: 100%|██████████| 200/200 [01:38<00:00,  2.04it/s, loss=0.0803]\n",
      "Epoch 234/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0939]\n",
      "Epoch 235/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0875]\n",
      "Epoch 236/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.09]  \n",
      "Epoch 237/500: 100%|██████████| 200/200 [01:44<00:00,  1.91it/s, loss=0.0792]\n",
      "Epoch 238/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0973]\n",
      "Epoch 239/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0918]\n",
      "Epoch 240/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0935]\n",
      "Epoch 241/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0888]\n",
      "Epoch 242/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0846]\n",
      "Epoch 243/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0812]\n",
      "Epoch 244/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0826]\n",
      "Epoch 245/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0854]\n",
      "Epoch 246/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0871]\n",
      "Epoch 247/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0861]\n",
      "Epoch 248/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0951]\n",
      "Epoch 249/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0894]\n",
      "Epoch 250/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0815]\n",
      "Epoch 251/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0965]\n",
      "Epoch 252/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0897]\n",
      "Epoch 253/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0851]\n",
      "Epoch 254/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0853]\n",
      "Epoch 255/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0853]\n",
      "Epoch 256/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0912]\n",
      "Epoch 257/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0826]\n",
      "Epoch 258/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0826]\n",
      "Epoch 259/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0835]\n",
      "Epoch 260/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0857]\n",
      "Epoch 261/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.086] \n",
      "Epoch 262/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0925]\n",
      "Epoch 263/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0806]\n",
      "Epoch 264/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0891]\n",
      "Epoch 265/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0825]\n",
      "Epoch 266/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0852]\n",
      "Epoch 267/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0802]\n",
      "Epoch 268/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0986]\n",
      "Epoch 269/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0961]\n",
      "Epoch 270/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0941]\n",
      "Epoch 271/500: 100%|██████████| 200/200 [01:37<00:00,  2.04it/s, loss=0.0785]\n",
      "Epoch 272/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.101] \n",
      "Epoch 273/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.084] \n",
      "Epoch 274/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.0933]\n",
      "Epoch 275/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.096] \n",
      "Epoch 276/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0945]\n",
      "Epoch 277/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0867]\n",
      "Epoch 278/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0913]\n",
      "Epoch 279/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0852]\n",
      "Epoch 280/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0894]\n",
      "Epoch 281/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0931]\n",
      "Epoch 282/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.092] \n",
      "Epoch 283/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0824]\n",
      "Epoch 284/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0884]\n",
      "Epoch 285/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.088] \n",
      "Epoch 286/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0797]\n",
      "Epoch 287/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0928]\n",
      "Epoch 288/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0945]\n",
      "Epoch 289/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.081] \n",
      "Epoch 290/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0845]\n",
      "Epoch 291/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0871]\n",
      "Epoch 292/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0891]\n",
      "Epoch 293/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0847]\n",
      "Epoch 294/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0862]\n",
      "Epoch 295/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0949]\n",
      "Epoch 296/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0856]\n",
      "Epoch 297/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0904]\n",
      "Epoch 298/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0903]\n",
      "Epoch 299/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.086] \n",
      "Epoch 300/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0869]\n",
      "Epoch 301/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0792]\n",
      "Epoch 302/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0824]\n",
      "Epoch 303/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0836]\n",
      "Epoch 304/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0809]\n",
      "Epoch 305/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0902]\n",
      "Epoch 306/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0927]\n",
      "Epoch 307/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0781]\n",
      "Epoch 308/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.073] \n",
      "Epoch 309/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.089] \n",
      "Epoch 310/500: 100%|██████████| 200/200 [01:36<00:00,  2.06it/s, loss=0.0912]\n",
      "Epoch 311/500: 100%|██████████| 200/200 [01:40<00:00,  1.99it/s, loss=0.0829]\n",
      "Epoch 312/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0816]\n",
      "Epoch 313/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0953]\n",
      "Epoch 314/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0848]\n",
      "Epoch 315/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0931]\n",
      "Epoch 316/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0795]\n",
      "Epoch 317/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0871]\n",
      "Epoch 318/500: 100%|██████████| 200/200 [01:40<00:00,  1.99it/s, loss=0.0913]\n",
      "Epoch 319/500: 100%|██████████| 200/200 [01:44<00:00,  1.92it/s, loss=0.0845]\n",
      "Epoch 320/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0779]\n",
      "Epoch 321/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0937]\n",
      "Epoch 322/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0807]\n",
      "Epoch 323/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0978]\n",
      "Epoch 324/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0848]\n",
      "Epoch 325/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.079] \n",
      "Epoch 326/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0936]\n",
      "Epoch 327/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0769]\n",
      "Epoch 328/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0874]\n",
      "Epoch 329/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0811]\n",
      "Epoch 330/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0773]\n",
      "Epoch 331/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0912]\n",
      "Epoch 332/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0846]\n",
      "Epoch 333/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0933]\n",
      "Epoch 334/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.104] \n",
      "Epoch 335/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.0933]\n",
      "Epoch 336/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0888]\n",
      "Epoch 337/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0802]\n",
      "Epoch 338/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0834]\n",
      "Epoch 339/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.082] \n",
      "Epoch 340/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0937]\n",
      "Epoch 341/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0859]\n",
      "Epoch 342/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0774]\n",
      "Epoch 343/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0814]\n",
      "Epoch 344/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0784]\n",
      "Epoch 345/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0877]\n",
      "Epoch 346/500: 100%|██████████| 200/200 [01:39<00:00,  2.01it/s, loss=0.0833]\n",
      "Epoch 347/500: 100%|██████████| 200/200 [01:37<00:00,  2.05it/s, loss=0.0771]\n",
      "Epoch 348/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0819]\n",
      "Epoch 349/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0836]\n",
      "Epoch 350/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0827]\n",
      "Epoch 351/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0737]\n",
      "Epoch 352/500: 100%|██████████| 200/200 [01:37<00:00,  2.06it/s, loss=0.0867]\n",
      "Epoch 353/500: 100%|██████████| 200/200 [01:35<00:00,  2.08it/s, loss=0.0854]\n",
      "Epoch 354/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0773]\n",
      "Epoch 355/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0848]\n",
      "Epoch 356/500: 100%|██████████| 200/200 [01:35<00:00,  2.10it/s, loss=0.091] \n",
      "Epoch 357/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.083] \n",
      "Epoch 358/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0885]\n",
      "Epoch 359/500: 100%|██████████| 200/200 [01:35<00:00,  2.09it/s, loss=0.0898]\n",
      "Epoch 360/500: 100%|██████████| 200/200 [01:36<00:00,  2.08it/s, loss=0.0958]\n",
      "Epoch 361/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0864]\n",
      "Epoch 362/500: 100%|██████████| 200/200 [01:36<00:00,  2.07it/s, loss=0.0859]\n",
      "Epoch 363/500:  36%|███▌      | 72/200 [00:38<01:07,  1.89it/s, loss=0.077] \n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[34], line 12\u001b[0m\n\u001b[0;32m      9\u001b[0m pre_train_model_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel/fineTuned_weights_epoch_10.safetensors\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m     10\u001b[0m save_model_epochs \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m60\u001b[39m\n\u001b[1;32m---> 12\u001b[0m \u001b[43mfine_tuned_safetensors_load_file_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43msave_model_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpre_train_model_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmin_loss\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmin_loss\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msave_model_epochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msave_model_epochs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdataloader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdataloader\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moptimizer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptimizer\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\Desktop\\DL\\Super\\dit\\lm_utils\\src\\train.py:91\u001b[0m, in \u001b[0;36mfine_tuned_safetensors_load_file_model\u001b[1;34m(save_model_dir, pre_train_model_path, epochs, min_loss, save_model_epochs, model, dataloader, optimizer)\u001b[0m\n\u001b[0;32m     89\u001b[0m model\u001b[38;5;241m.\u001b[39mtrain() \u001b[38;5;66;03m# set the model to training mode\u001b[39;00m\n\u001b[0;32m     90\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tqdm(total\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mlen\u001b[39m(dataloader), desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mEpoch \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mepoch\u001b[38;5;250m \u001b[39m\u001b[38;5;241m+\u001b[39m\u001b[38;5;250m \u001b[39m\u001b[38;5;241m1\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mepochs\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, dynamic_ncols\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m pbar:\n\u001b[1;32m---> 91\u001b[0m     \u001b[38;5;28;01mfor\u001b[39;00m _, (inputs, targets) \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(dataloader):\n\u001b[0;32m     92\u001b[0m         optimizer\u001b[38;5;241m.\u001b[39mzero_grad() \u001b[38;5;66;03m# clear gradients from the previous step\u001b[39;00m\n\u001b[0;32m     93\u001b[0m         _, loss \u001b[38;5;241m=\u001b[39m model(inputs, targets)\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\utils\\data\\dataloader.py:701\u001b[0m, in \u001b[0;36m_BaseDataLoaderIter.__next__\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    698\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sampler_iter \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m    699\u001b[0m     \u001b[38;5;66;03m# TODO(https://github.com/pytorch/pytorch/issues/76750)\u001b[39;00m\n\u001b[0;32m    700\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_reset()  \u001b[38;5;66;03m# type: ignore[call-arg]\u001b[39;00m\n\u001b[1;32m--> 701\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_next_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    702\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_yielded \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m    703\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[0;32m    704\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_dataset_kind \u001b[38;5;241m==\u001b[39m _DatasetKind\u001b[38;5;241m.\u001b[39mIterable\n\u001b[0;32m    705\u001b[0m     \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_IterableDataset_len_called \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m    706\u001b[0m     \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_yielded \u001b[38;5;241m>\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_IterableDataset_len_called\n\u001b[0;32m    707\u001b[0m ):\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\utils\\data\\dataloader.py:757\u001b[0m, in \u001b[0;36m_SingleProcessDataLoaderIter._next_data\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    755\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_next_data\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m    756\u001b[0m     index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_next_index()  \u001b[38;5;66;03m# may raise StopIteration\u001b[39;00m\n\u001b[1;32m--> 757\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dataset_fetcher\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfetch\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m  \u001b[38;5;66;03m# may raise StopIteration\u001b[39;00m\n\u001b[0;32m    758\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pin_memory:\n\u001b[0;32m    759\u001b[0m         data \u001b[38;5;241m=\u001b[39m _utils\u001b[38;5;241m.\u001b[39mpin_memory\u001b[38;5;241m.\u001b[39mpin_memory(data, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pin_memory_device)\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py:52\u001b[0m, in \u001b[0;36m_MapDatasetFetcher.fetch\u001b[1;34m(self, possibly_batched_index)\u001b[0m\n\u001b[0;32m     50\u001b[0m         data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset\u001b[38;5;241m.\u001b[39m__getitems__(possibly_batched_index)\n\u001b[0;32m     51\u001b[0m     \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m---> 52\u001b[0m         data \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset[idx] \u001b[38;5;28;01mfor\u001b[39;00m idx \u001b[38;5;129;01min\u001b[39;00m possibly_batched_index]\n\u001b[0;32m     53\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m     54\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset[possibly_batched_index]\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\utils\\data\\_utils\\fetch.py:52\u001b[0m, in \u001b[0;36m<listcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m     50\u001b[0m         data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset\u001b[38;5;241m.\u001b[39m__getitems__(possibly_batched_index)\n\u001b[0;32m     51\u001b[0m     \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m---> 52\u001b[0m         data \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdataset\u001b[49m\u001b[43m[\u001b[49m\u001b[43midx\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m idx \u001b[38;5;129;01min\u001b[39;00m possibly_batched_index]\n\u001b[0;32m     53\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m     54\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdataset[possibly_batched_index]\n",
      "File \u001b[1;32mc:\\Users\\c1253\\Desktop\\DL\\Super\\dit\\lm_utils\\src\\dataset.py:122\u001b[0m, in \u001b[0;36mFigureDataSet.__getitem__\u001b[1;34m(self, idx)\u001b[0m\n\u001b[0;32m    119\u001b[0m label \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabels[idx]\n\u001b[0;32m    121\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransform:\n\u001b[1;32m--> 122\u001b[0m     image \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimage\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    124\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m image, label\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torchvision\\transforms\\transforms.py:95\u001b[0m, in \u001b[0;36mCompose.__call__\u001b[1;34m(self, img)\u001b[0m\n\u001b[0;32m     93\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__call__\u001b[39m(\u001b[38;5;28mself\u001b[39m, img):\n\u001b[0;32m     94\u001b[0m     \u001b[38;5;28;01mfor\u001b[39;00m t \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransforms:\n\u001b[1;32m---> 95\u001b[0m         img \u001b[38;5;241m=\u001b[39m \u001b[43mt\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     96\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m img\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\nn\\modules\\module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1734\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)  \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m   1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1736\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\nn\\modules\\module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m   1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m   1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[0;32m   1745\u001b[0m         \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m   1746\u001b[0m         \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1747\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m   1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m   1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torchvision\\transforms\\transforms.py:354\u001b[0m, in \u001b[0;36mResize.forward\u001b[1;34m(self, img)\u001b[0m\n\u001b[0;32m    346\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, img):\n\u001b[0;32m    347\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m    348\u001b[0m \u001b[38;5;124;03m    Args:\u001b[39;00m\n\u001b[0;32m    349\u001b[0m \u001b[38;5;124;03m        img (PIL Image or Tensor): Image to be scaled.\u001b[39;00m\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    352\u001b[0m \u001b[38;5;124;03m        PIL Image or Tensor: Rescaled image.\u001b[39;00m\n\u001b[0;32m    353\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[1;32m--> 354\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresize\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minterpolation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mantialias\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torchvision\\transforms\\functional.py:479\u001b[0m, in \u001b[0;36mresize\u001b[1;34m(img, size, interpolation, max_size, antialias)\u001b[0m\n\u001b[0;32m    476\u001b[0m     pil_interpolation \u001b[38;5;241m=\u001b[39m pil_modes_mapping[interpolation]\n\u001b[0;32m    477\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m F_pil\u001b[38;5;241m.\u001b[39mresize(img, size\u001b[38;5;241m=\u001b[39moutput_size, interpolation\u001b[38;5;241m=\u001b[39mpil_interpolation)\n\u001b[1;32m--> 479\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF_t\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresize\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minterpolation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minterpolation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mantialias\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mantialias\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torchvision\\transforms\\_functional_tensor.py:467\u001b[0m, in \u001b[0;36mresize\u001b[1;34m(img, size, interpolation, antialias)\u001b[0m\n\u001b[0;32m    464\u001b[0m \u001b[38;5;66;03m# Define align_corners to avoid warnings\u001b[39;00m\n\u001b[0;32m    465\u001b[0m align_corners \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m interpolation \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbilinear\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbicubic\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m--> 467\u001b[0m img \u001b[38;5;241m=\u001b[39m \u001b[43minterpolate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mimg\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minterpolation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43malign_corners\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malign_corners\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mantialias\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mantialias\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    469\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m interpolation \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbicubic\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m out_dtype \u001b[38;5;241m==\u001b[39m torch\u001b[38;5;241m.\u001b[39muint8:\n\u001b[0;32m    470\u001b[0m     img \u001b[38;5;241m=\u001b[39m img\u001b[38;5;241m.\u001b[39mclamp(\u001b[38;5;28mmin\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, \u001b[38;5;28mmax\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m255\u001b[39m)\n",
      "File \u001b[1;32mc:\\Users\\c1253\\venvdemo\\lib\\site-packages\\torch\\nn\\functional.py:4565\u001b[0m, in \u001b[0;36minterpolate\u001b[1;34m(input, size, scale_factor, mode, align_corners, recompute_scale_factor, antialias)\u001b[0m\n\u001b[0;32m   4563\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m align_corners \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m   4564\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m antialias:\n\u001b[1;32m-> 4565\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_C\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_nn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_upsample_bilinear2d_aa\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m   4566\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_size\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43malign_corners\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mscale_factors\u001b[49m\n\u001b[0;32m   4567\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   4568\u001b[0m \u001b[38;5;66;03m# Two levels are necessary to prevent TorchScript from touching\u001b[39;00m\n\u001b[0;32m   4569\u001b[0m \u001b[38;5;66;03m# are_deterministic_algorithms_enabled.\u001b[39;00m\n\u001b[0;32m   4570\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mjit\u001b[38;5;241m.\u001b[39mis_scripting():\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "from utils.train import fine_tuned_safetensors_load_file_model\n",
    "import torch\n",
    "\n",
    "optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5)\n",
    "epochs = 500\n",
    "min_loss = 0.05\n",
    "model_number = 0\n",
    "save_model_dir = 'model'\n",
    "pre_train_model_path = \"model/fineTuned_weights_epoch_10.safetensors\"\n",
    "save_model_epochs = 60\n",
    "\n",
    "fine_tuned_safetensors_load_file_model(save_model_dir, pre_train_model_path, epochs, min_loss=min_loss, save_model_epochs=save_model_epochs, model=model, dataloader=dataloader, optimizer=optimizer)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "test: inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "from safetensors.torch import load_file, load_model\n",
    "\n",
    "def backward_denoise(model: object, model_path: str, img: torch.Tensor, classes: torch.Tensor, time_step):\n",
    "    assert os.path.exists(model_path), f\"model_path not exist\"\n",
    "\n",
    "    model.eval()\n",
    "    model_path = load_file(model_path)\n",
    "    model.load_state_dict(model_path)\n",
    "    denoised_images = [img.clone(), ] # get the origin noise img\n",
    "    # get the denoise parameters\n",
    "    alphas, variance, alphas_cumprod = model.get_noise._create_noise_parameters(time_step)\n",
    "\n",
    "    # from time_step to 0.\n",
    "    for time in range(time_step - 1, -1, -1):\n",
    "        t = torch.full((img.size(0),), time) # (time * batch_size)\n",
    "        noise = model.generate(img, t, classes) # get the denoise img\n",
    "        shape = (img.size(0), 1, 1, 1)\n",
    "        mean = 1 / torch.sqrt(alphas[t].view(*shape)) * \\\n",
    "            (img - (1 - alphas[t].view(*shape))/torch.sqrt(1 - alphas_cumprod[t].view(*shape)) * noise)\n",
    "        if time != 0:\n",
    "            img = mean + torch.randn_like(img) * \\\n",
    "                torch.sqrt(variance[t].view(*shape))\n",
    "        else:\n",
    "            img = mean\n",
    "        img = torch.clamp(img, -1.0, 1.0).detach() # make sure the img value in the range(-1.0, 1.0) and dont inpput compute the model grdient update\n",
    "        denoised_images.append(img) # add current denoised image\n",
    "    return denoised_images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "model_path = \"model/fineTuned_weights_epoch_360.safetensors\"\n",
    "img = torch.rand(size=(1, 1, 16, 16)) # (batch_size, channel, img_h, img_w)\n",
    "\n",
    "# classes = torch.tensor(0, dtype=torch.long)\n",
    "# classes = torch.arange(start=0, end=10, step=1, dtype=torch.long)\n",
    "classes = torch.tensor([6], dtype=torch.long)\n",
    "denoise_img = backward_denoise(model, model_path, img, classes, time_step=500)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "show the origin noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x20081069a50>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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FNChQ4d0yy23KDU1VfHx8Ro4cKB2795tYlcAgAjl+js9P//8c40ePVpjx47Vyy+/rG984xvav3+/unfv7vauAAARzPUCWrhwoTIzM/XUU081rcvOznZ7NwCACOf6S3Avvviihg0bpptuukk9evTQkCFD9MQTT7S6fTAYVCAQaLYAALo+1wvogw8+UFlZmfr06aMNGzborrvu0owZM7Rq1aoWty8pKVFycnLTkpmZ6fZIAIBOyPUCCofDGjp0qBYsWKAhQ4bojjvu0O23367ly5e3uH1RUZHq6uqalurqardHAgB0Qq4XUEZGhi677LJm6/r166ePPvqoxe19Pp+SkpKaLQCArs/1Aho9erT27t3bbN2+ffvUq1cvt3cFAIhgrhfQvffeq+3bt2vBggU6cOCAVq9erRUrVig/P9/tXQEAIpjrBTR8+HCtXbtWa9as0YABA/TQQw+ptLRUU6ZMcXtXAIAIZuQTUa+77jpdd911JqIBAF0E14IDAFhBAQEArKCAAABWUEAAACuMnITghvhPGuT1RrufG3/S9cxGiy75P8ayf1w5w1j2uHvuMZYtSR+Pc4xl//WGpcayP5twylj2v9d9y1h2/GchY9mffsfc/+VH82ONZfcsOW4sW5J+dKG5j5v5q7ePsey/zc4yknv6dPt+znIEBACwggICAFhBAQEArKCAAABWUEAAACsoIACAFRQQAMAKCggAYAUFBACwggICAFhBAQEArKCAAABWUEAAACsoIACAFRQQAMAKCggAYAUFBACwggICAFhBAQEArKCAAABWUEAAACsoIACAFV7bA7Tmk8t9ivb5XM8tuHin65mN3j+VYSx72Kh9xrL377vUWLYkXVbysbHs71bMNJYd+6+1xrJPnY42ln10jLnfK2M+9RjLfvL7K41lX7HO3OMtSUN/dY+x7MBPTxnLvqD7CSO5oRMN0ra2t+MICABgBQUEALCCAgIAWEEBAQCsoIAAAFZQQAAAKyggAIAVrhdQKBRScXGxsrOzFR8fr0suuUQPPfSQHMdxe1cAgAjm+htRFy5cqLKyMq1atUr9+/fX7t27NW3aNCUnJ2vGjBlu7w4AEKFcL6A///nPuuGGGzR+/HhJUu/evbVmzRrt3GnuCgQAgMjj+ktwV155pTZt2qR9+/5+6Zi3335bb775pnJzc1vcPhgMKhAINFsAAF2f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pYna58SJE2d8kFd0dLTC4bClic5Ndna20tPTmz1XA4GAduzY0emfq43ls3//fr366qtKTU21PVKbpk6dqr/85S/Nnqd+v1+zZs3Shg0bbI93hoh9Ca6wsFB5eXkaNmyYRowYodLSUtXX12vatGm2Rzur/Px8rV69Wi+88IISExObXgdPTk5WfHy85elal5iYeMbfqRISEpSamtqp/35177336sorr9SCBQs0adIk7dy5UytWrNCKFStsj3ZWEyZM0Pz585WVlaX+/fvrrbfe0uLFi3XbbbfZHu0Mx48f14EDB5puV1VVqbKyUikpKcrKylJBQYEefvhh9enTR9nZ2SouLpbf79fEiRPtDa2zz52RkaEbb7xRFRUVWr9+vUKhUNNzNSUlRbGxsbbGbvPx/nJRxsTEKD09XZdeeun5HrVttk/D+yqWLl3qZGVlObGxsc6IESOc7du32x6pTZJaXJ566inbo3VYJJyG7TiO88c//tEZMGCA4/P5nL59+zorVqywPVKbAoGAM3PmTCcrK8uJi4tzvvnNbzo///nPnWAwaHu0M2zevLnF7+m8vDzHcf5+KnZxcbGTlpbm+Hw+55prrnH27t1rd2jn7HNXVVW1+lzdvHlzp527JZ35NGw+jgEAYEVE/g0IABD5KCAAgBUUEADACgoIAGAFBQQAsIICAgBYQQEBAKyggAAAVlBAAAArKCAAgBUUEADACgoIAGDF/wfnHUfLQerS6AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(img.squeeze(0).permute(1,2,0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "generate denoise image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.5, 15.5, 15.5, -0.5)"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(((denoise_img[-1] + 1) / 2).squeeze(0).permute(1,2,0).cpu().numpy())\n",
    "plt.axis('off')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "show denoise process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 30 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rows = 5\n",
    "cols = 6\n",
    "num_images_to_display = rows * cols  # 30 images\n",
    "total_timesteps = 500\n",
    "step = total_timesteps // num_images_to_display # 40\n",
    "\n",
    "fig, axes = plt.subplots(rows, cols, figsize=(4,4))\n",
    "axes = axes.flatten()\n",
    "\n",
    "for i in range(num_images_to_display):\n",
    "    timestep = total_timesteps - 1 - (i * step)\n",
    "    img_show = denoise_img[total_timesteps - 1 - timestep].squeeze(0) # show the last denoise image\n",
    "    img_show = (img_show + 1) / 2 # convert [-1, 1] to [0, 1]\n",
    "    if img_show.ndim == 4:\n",
    "        img_show = img_show.squeeze(0)\n",
    "    img_show = img_show.permute(1,2,0).cpu().numpy()\n",
    "    axes[i].imshow(img_show)\n",
    "    axes[i].axis('off')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "laosix",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
